home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48hor1
/
rev.rpl
< prev
next >
Wrap
Text File
|
1990-10-18
|
2KB
|
68 lines
%%HP: T(3)A(R)F(.);
@
@ REV, by ?
@ Slightly faster than the REVERSE command in Donnelly's Tool Library, but
@ REV only reverses strings; REVERSE also reverses lists.
@ Reverse the characters in the stack level 1 string. Based on the
@ HP-71B REV$ (internal) routine.
\<<
"D9D20" @ Begin ; 02D9D
"E1632" + @ \<< ; 2361E
"78BF1" + @ DUP ; 1FB87
"64BC1" + @ NUM ; 1CB46
"8DBF1" + @ DROP ; 1FBD8
"CB2A1" + @ NEWOB ; 1A2BC
"CCD20" + @ In-line code ; 02DCC
"38000" + @ Code length = 131 ; 00083
"137" + @ CD1EX ; Save D1 in R1...
"109" + @ R1=C ; ...
"137" + @ CD1EX ; ...
"AF9" + @ C=B W ; Save B in R2...
"10A" + @ R2=C ; ...
"147" + @ C=DAT1 A ; Put address of string object
"137" + @ CD1EX ; in D1.
"174" + @ D1=D1+ 5 ; Skip prolog
"143" + @ A=DAT1 A ; Copy length to A[A]
"174" + @ D1=D1+ 5 ; Skip length
"133" + @ AD1EX ; Adjust length...
"1C4" + @ D1=D1- 5 ; ...
"133" + @ AD1EX ; ...
"AF1" + @ B=0 W ; Convert length in nibbles to
"D8" + @ B=A A ; length in bytes and divide by
"822" + @ SB=0 ; two...
"81D" + @ BSRB ; ...
"81D" + @ BSRB ; ...
"137" + @ CD1EX ; ...
"C9" + @ C=C+B A ; Point to mid-point of string
"C9" + @ C=C+B A ; and store in D0 and D1...
"135" + @ D1=C ; ...
"136" + @ CD0EX ; ...
"D7" + @ D=C A ; Save D0 in D.
"83271" + @ ?SB=0 ; String length even or odd?
@ GOYES evn ; +23 (17)
"511" + @ GONC odd ; +17 (11) BET
"1C1" + @ lp D1=D1- 2 ; Next character (#2)
"14A" + @ A=DAT0 B ; Swap characters at D0 and D1...
"14F" + @ C=DAT1 B ; ...
"149" + @ DAT1=A B ; ...
"14C" + @ DAT0=C B ; ...
"161" + @ odd D0=D0+ 2 ; Next character (#1)
"CD" + @ evn B=B-1 A ; Count characters.
"5BE" + @ GONC lp ; -21 (EB)
"DB" + @ C=D A ; Restore D0 from D...
"134" + @ D0=C ; ...
"119" + @ C=R1 ; Restore D1 from R1...
"135" + @ D1=C ; ...
"11A" + @ C=R2 ; Restore B from R2...
"AF5" + @ B=C W ; ...
"142" + @ A=DAT0 A ; End
"164" + @ D0=D0+ 5 ; of
"808C" + @ PC=(A) ; Routine
"93632" + @ \>> ; 23639
"B2130" + @ End ; 0312B
STR\->OBJ
'REV' STO
\>>